<?php 
/**
 * 短信发送
 */
namespace api\home\controller;
use cmf\controller\RestBaseController;
use think\Config;
use think\Db;
use \Qcloud\sms\SmsSingleSender AS sms;

class SendSmsController extends RestBaseController{
    
	private $SMSAppid;
	private $SMSKey;
	public $data;
	public function __construct(){
	    $this->data = input();
		$this->SMSAppid = Config::get('SMSAppid');
		$this->SMSKey = Config::get('SMSKey');
	}
	/**
	 * 验证码
	 * 单发短信/群发短信
	 * @auth    董
	 * @version v1.0.0
	 * @date    2018-06-05
	 * @return  [json]     [发送状态]
	 */
	public function sendSmscode(){
	    if (!isset($this->data['tel'])||empty($this->data['tel'])) {
			$this->error('请填写电话号码!');
		}
	    $tel=$this->data['tel'];
	    //检测号码是否存在
	    $rq = Db::table('doctor')->where(['tel'=>$tel])->find();
	    if(!$rq){
	    	$h = Db::table('helper')->where(['tel'=>$tel])->find();
	    	if(!$h){
	    		$this->error('账号不存在！');
	    	}
	    }
	    $code = mt_rand(1000,9999);
	    //$code = cmf_get_verification_code($tel);
	    // if (empty($code)) {
	    //      $this->error("验证码发送过多,请明天再试!");
	    // }
		$sms = new sms($this->SMSAppid, $this->SMSKey);
		#参数说明
		#1. 短信类型，0 为普通短信，1 营销短信
		#2. 国家码，如 86 为中国
		#3. 不带国家码的手机号   可为数组(群发)  ['电话1','电话2','电话3','电话4']
		#4. 信息内容，必须与申请的模板格式一致，否则将返回错误
		#5. 扩展码，可填空串
		#6. 服务端原样返回的参数，可填空串
		#返回json结果
		//$result['result'] = 0;
		$result = $sms->send(0, "86", "$tel","您的验证码:$code,该验证码5分钟内有效", "", "");
    	#返回说明
    	#result	number	错误码，0 表示成功（计费依据），非 0 表示失败, 参考 错误码
		#errmsg	string	错误消息，result 非 0 时的具体错误信息
		#ext	string	用户的 session 内容，腾讯 server 回包中会原样返回
		#fee	number	短信计费的条数，"fee" 字段计费说明
		#sid	string	本次发送标识 id，标识一次短信下发记录
		//5分钟失效
		$expireTime=5*60;
		cmf_verification_code_log($tel, $code,$expireTime);
		
		$result = json_decode($result,true);

		//手机或邮箱验证码检查，验证完后销毁验证码增加安全性,返回true验证码正确，false验证码错误
		//cmf_check_verification_code	
		if($result['result'] != 0 ){
			$this->error($result['errmsg']);
		}
		if(Db::table('doctor_login_code')->where(['tel'=>$this->data['tel']])->find()){
			Db::table('doctor_login_code')
					->where(['tel'=>$this->data['tel']])
					->update([
						'code'=>$code,
						'extime'=>time()+3000,
						'status'=>1,
						'msg'=>serialize($result),
						'addtime'=>date('Y-m-d H:i:s')
					]);
		}else{
			Db::table('doctor_login_code')->insert([
				'tel'=>$this->data['tel'],
				'code'=>$code,
				'extime'=>time()+3000,
				'status'=>1,
				'msg'=>serialize($result),
				'addtime'=>date('Y-m-d H:i:s')
			]);
		}
		$this->success('短信发送成功!',$code);
	}
}